#ifndef __BUOLA_GUI_CICONBASE_H__
#define __BUOLA_GUI_CICONBASE_H__

#include <buola/gui.h>
#include <buola/image/cpicture.h>

namespace buola { namespace gui {

///\addtogroup gui
///@{

////////////////////////////////////////////////////////////////////////////

/// base class for all icons

/// This class just defines the interface common to all icon types.
///
/// PIcon is a shared pointer to this class.
///
////////////////////////////////////////////////////////////////////////////

class CIconBase : public UShared
{
public:
    //! icon style
    enum EStyle
    {
        NORMAL,         //!< icon in its normal form
        SELECTED,       //!< selected version
        HIGHLIGHTED     //!< highlighted version
    };

    //! default icon sizes
    enum EDefaultSizes
    {
        SMALLEST=16,
        SMALL=24,
        MEDIUM=32,
        LARGE=48,
        LARGER=64,
        LARGEST=96
    };

protected:
//! \name constructor and destructor
//@{
    CIconBase() {}
    virtual ~CIconBase() {}
//@}

public:
    //! draws a version of the icon to the GC
    virtual bool Draw(img::CGC*,const CPoint_d&,int pSize,EStyle pStyle=NORMAL)=0;

    //! gets a version of the icon as a img::CPicture
    virtual img::CPicture GetPixmap(int pSize,EStyle pStyle=NORMAL)=0;
};

///@}

/*namespace gui*/ } /*namespace buola*/ }

#endif
